
using namespace std;

class Quote {
    public:
        // 虚析构函数（告诉编译器它应该执行的是基类的析构函数，还是派生类的析构函数）
        virtual ~Quote() = default;
        // 编译器将不会为这个类合成移动操作，而且在它的派生类中也没有合成的移动操作
        // 当我们移动 Quote 对象时，实际使用的是合成的拷贝操作
        // 解决办法：显式地定义移动操作和拷贝操作
        Quote() = default;
        Quote(const Quote&) = default;
        Quote(Quote&&) = default;
        Quote& operator=(const Quote&) = default;
        Quote& operator=(Quote&&) = default;
};

class Bulk_quote : public Quote {

};

int main()
{
    Quote *itemP = new Quote;
    delete itemP;               // 调用 Quote 的析构函数
    itemP = new Bulk_quote;
    delete itemP;               // 调用 Bulk_quote 的析构函数
}